home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 011 / archie.bas < prev    next >
BASIC Source File  |  1988-11-09  |  42KB  |  850 lines

  1.  
  2. 10 GOTO 20010:'initialization
  3. 200 '
  4. 300 '
  5. 400 '
  6. 500 '
  7. 501 'archie moves with arrows
  8. 510 F=1-(F=1):S=X:T=Y:W=U:Z=V:X$=INKEY$:IF LEN(X$)<2 THEN 540
  9. 520 K=ASC(MID$(X$,2,1)):G=-G*(K<>75 AND K<>77)+(K=75)-(K=77):H=-H*(K<>72 AND K<>80)+(K=72)-(K=80)
  10. 530 IF K=79 THEN 590:'end
  11. 540 M=M-1:LOCATE 24,35:PRINT M;:IF M<1 THEN 590 ELSE R=100*RND(1):IF R>(P+10) THEN 550
  12. 542 U=U+(40-ABS(U-X))*SGN(U-X)/4-6+11*RND(1):V=V+(25-ABS(V-Y))*SGN(V-Y)/4-5+9*RND(1)
  13. 544 IF U<1 THEN U=10
  14. 545 IF U>32 THEN U=23
  15. 546 IF V<1 THEN V=3
  16. 547 IF V>21 THEN V=18
  17. 550 X=X+G:Y=Y+H:IF X<1 THEN X=1:SOUND 37,1:SOUND 37,0
  18. 551 IF X>33 THEN X=33:SOUND 370,1:SOUND 37,0
  19. 552 IF Y<1 THEN Y=1:SOUND 1370,1:SOUND 37,0
  20. 553 IF Y>21 THEN Y=21:SOUND 1370,1:SOUND 37,0
  21. 560 COLOR 10,5:LOCATE T,S:PRINT C$(0);:LOCATE Y,X:PRINT C$(F);
  22. 562 COLOR 15,5:LOCATE Z,W:PRINT C$(0);:LOCATE V,U:PRINT C$(3);
  23. 570 IF ABS(X-U)<6 AND ABS(Y-V)<2 THEN 590 ELSE 510
  24. 590 COLOR 7,0:RETURN
  25. 600 '
  26. 601 'single note la cucaracha
  27. 610 IF C<1 OR C>49  THEN C=1:RESTORE:G=-1:'restore at start or song is over
  28. 620 READ J,K : IF J=-1 THEN 670:'end
  29. 630 SOUND M(J),K:IF J=0 AND K=1 THEN 620
  30. 640 G=-G*(K<>3)+(K=3)*((G=-1)-(G=1))
  31. 650 IF X<2 THEN X=2
  32. 654 IF Y<2 OR Y>25 THEN Y=2
  33. 656 LOCATE Y,X:PRINT C$(1);:X=X+G
  34. 660 C=C+1:GOTO 690
  35. 670 C=0
  36. 690 RETURN
  37. 700 '
  38. 701 'hi, i'm archie - fix shift
  39. 710 X=20:Y=24:C=0:T=0
  40. 720 GOTO 750
  41. 730 R= RND(1):IF R>.5 THEN KEY OFF:LOCATE 25,1:PRINT Z$;
  42. 740 R= RND(1):IF R>.4 THEN KEY ON
  43. 750 X$=INKEY$:DEF SEG:POKE 106,0:IF X$<>"" THEN IF LEFT$(X$,1)=CHR$(21) THEN 780
  44. 760 GOSUB 610
  45. 762 T=T+1:IF T<100 THEN 730
  46. 780 LOCATE 24,1:PRINT"                                       ";
  47. 790 RETURN
  48. 800 '
  49. 801 'train
  50. 810 RESTORE:FOR I=1 TO LEN(J$)
  51. 820 READ J,K:SOUND M(J),K:IF J=0 AND K=1 THEN 820
  52. 830 LOCATE Y,39-I:PRINT LEFT$(J$,I);
  53. 840 NEXT
  54. 890 RETURN
  55. 900 '
  56. 1001 'play la cucaracha
  57. 1010 COLOR 0,7:H=1:I=32:WHILE I>20:H=-1*(H=2)-2*(H=1):LOCATE Y,I:PRINT C$(H);
  58. 1012 :SOUND (I*37),2:I=I-1:WEND
  59. 1020 SOUND 1000,1:RESTORE 30010:G=-1
  60. 1030 READ J,K : IF J=-1 THEN 1070
  61. 1040 SOUND M(J),K:IF J=0 AND K=1 THEN 1030
  62. 1050 G=-G*(K<>3)+(K=3)*((G=-1)-(G=1))
  63. 1052 LOCATE Y,I:PRINT C$(1);:I=I+G
  64. 1060 GOTO 1030
  65. 1070 WHILE I>1:H=-1*(H=2)-2*(H=1):LOCATE Y,I:PRINT C$(H);
  66. 1072 :SOUND (I*37),2:I=I-1:WEND
  67. 1090 RETURN
  68. 1100 '
  69. 1101 'typing sr
  70. 1110 LOCATE 21,1:COLOR 0,7
  71. 1112 PRINT:PRINT:PRINT:PRINT
  72. 1120 FOR I=1 TO LEN(J$):LOCATE 19,I+2:PRINT MID$(J$,I,1);
  73. 1122 LOCATE 20,I:PRINT C$(1);
  74. 1130 SOUND 1000,1:SOUND 37,0:SOUND 32767,1
  75. 1140 NEXT
  76. 1150 LOCATE 20,I:PRINT"       ";
  77. 1190 RETURN
  78. 1200 '
  79. 1300 '
  80. 1301 'hit space when ready sr
  81. 1310 L=-D/5:SOUND 370,1
  82. 1320 COLOR 18+16*(L<0),7:LOCATE Y,2:PRINT F$+ " - HIT SPACE WHEN READY ";:COLOR 0,7
  83. 1330 X$=INKEY$:DEF SEG:POKE 106,0:IF X$<>"" THEN 1350
  84. 1332 L=L+1:IF L<1 THEN 1320
  85. 1340 SOUND L*37,1:SOUND 32767,14:GOTO 1320
  86. 1350 LOCATE Y,2:FOR L=1 TO LEN(F$)+24:PRINT " ";:NEXT:'x$ contains key hit
  87. 1390 RETURN
  88. 1400 '
  89. 1401 'your choice sr
  90. 1410 L=-D/3:SOUND 370,1
  91. 1420 COLOR 18+16*(L<0),7:LOCATE Y,2:PRINT " YOUR CHOICE - "+F$+" - ? ";:COLOR 0,7
  92. 1430 X$=INKEY$:DEF SEG:POKE 106,0:IF X$<>"" THEN 1450
  93. 1432 L=L+1:IF L<1 THEN 1420
  94. 1440 SOUND L*37,1:SOUND 32767,14:GOTO 1420
  95. 1450 LOCATE Y,2:FOR L=1 TO LEN(F$)+20:PRINT " ";:NEXT:'x$ contains key hit
  96. 1490 RETURN
  97. 1500 '
  98. 1501 'sing la cucaracha
  99. 1510 X=32:Y=5
  100. 1520 RESTORE
  101. 1530 READ J,K : IF J=-1 THEN 1590:'end of song
  102. 1540 SOUND M(J),K:IF J=0 AND K=1 THEN 1530:'staccato
  103. 1550 G=(J=49 OR J=44 OR J=51):IF G<>0 THEN LOCATE Y,X+1:PRINT C$(0);:Y=Y+2:X=32
  104. 1552 LOCATE Y,X:PRINT C$(3);:X=X-1
  105. 1560 GOTO 1530
  106. 1590 RETURN
  107. 1600 '
  108. 1700 '
  109. 1800 '
  110. 1900 '
  111. 2000 '
  112. 2100 '
  113. 2200 '
  114. 2201 'type-delay
  115. 2210 GOSUB 1110
  116. 2220 J$="   ":I=FRE(""):GOSUB 1110:SOUND 32767,D/50
  117. 2290 RETURN
  118. 2300 '
  119. 2400 '
  120. 2500 '
  121. 2600 '
  122. 2601 'typed menu
  123. 2610 FOR I=2 TO 23:FOR H=0 TO 2:LOCATE I+(H=0),1:PRINT C$(H);:SOUND I*100,1:NEXT:NEXT
  124. 2611 COLOR 7,0:CLS:COLOR 0,7
  125. 2612 LOCATE 24,1:PRINT
  126. 2614 FOR I=6 TO 1 STEP -1:PRINT:SOUND I*387,1:SOUND 32767,8:NEXT
  127. 2620 J$=C$(3)+"SELECT BY NUMBER"+C$(2):GOSUB 2210
  128. 2640 J$="1 -- Sing Along":GOSUB 2210
  129. 2642 J$="2 -- Cucaracha Quiz":GOSUB 2210
  130. 2644 J$="3 -- hi, i'm archie":GOSUB 2210
  131. 2646 J$="4 -- Game - Archie & Mehitabel":GOSUB 2210
  132. 2650 J$="5 -- Almost Painless":GOSUB 1110 GOTO 2640
  133. 2652 J$="      Structured BASIC":GOSUB 2210
  134. 2660 GOSUB 1110
  135. 2670 J$="8 -- Typed Menu":GOSUB 2210
  136. 2672 J$="9 -- Exit Program":GOSUB 2210
  137. 2680 Y=23:GOSUB 1410 CHOICE:K=ASC(X$)-48:IF K>0 AND K<10 THEN 2682 ELSE 2680
  138. 2682 X=FRE(""):Q=8:'coming from menu
  139. 2690 RETURN
  140. 2700 '
  141. 2701 'quick menu
  142. 2710 COLOR 15,4:CLS:LOCATE 2,2:PRINT C$(3)+" SELECT BY NUMBER "+C$(2)
  143. 2740 LOCATE 4,2:PRINT"1 -- Sing Along"
  144. 2742 LOCATE 6,2:PRINT"2 -- Cucaracha Quiz"
  145. 2744 LOCATE 8,2: PRINT"3 -- hi, i'm archie"
  146. 2746 LOCATE 10,2:PRINT"4 -- Game - Archie & Mehitabel"
  147. 2750 LOCATE 12,2:PRINT"5 -- Almost Painless"
  148. 2752 LOCATE 13,2:PRINT"      Structured BASIC"
  149. 2770 LOCATE 17,2:PRINT"8 -- Typed Menu"
  150. 2772 LOCATE 19,2:PRINT"9 -- Exit Program"
  151. 2780 Y=23:GOSUB 1410 CHOICE:K=ASC(X$)-48:IF K>0 AND K<10 THEN 2782 ELSE 2780
  152. 2782 X=FRE(""):Q=8:'coming from menu
  153. 2790 RETURN
  154. 2900 '
  155. 3000 '
  156. 3100 '
  157. 3101 'game - archie & mehitabel
  158. 3110 KEY OFF:P=2:M=600
  159. 3112 COLOR 0,7,0:CLS:LOCATE 23,1:PRINT"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  Help Archie tag Mehitabel  TIME: ";
  160. 3120 LOCATE 25,1:PRINT" HIT ("+CHR$(24)+CHR$(25)+CHR$(26)+CHR$(27)+") TO MOVE HIM (OR HIT "+CHR$(34)+"End"+CHR$(34)+")";
  161. 3121 LOCATE 22,2:PRINT F$+" Promoted to ";:IF P=2 THEN PRINT "Junior Clerk";
  162. 3122 IF P=4 THEN PRINT"Assoc. Clerk";
  163. 3123 IF P=8 THEN PRINT"Staff Clerk";
  164. 3124 IF P=16 THEN PRINT"Advisory Clerk";
  165. 3125 IF P=32 THEN PRINT"Senior Clerk";
  166. 3126 IF P=64 THEN PRINT"Manager";
  167. 3128 IF P=128 THEN PRINT"Gen. Mgr.";
  168. 3129 IF P>128 THEN 3190
  169. 3132 X=2:Y=21:U=30:V=2:G=0:H=0
  170. 3134 COLOR 7,5:RESTORE 30070:FOR I=1 TO 21:READ J:SOUND 37+J*P/4,1:LOCATE I,1:PRINT"                                        ":NEXT
  171. 3140 GOSUB 510:SOUND 400,1:SOUND 1000,1:SOUND 100,1:IF K=79 OR P>127 OR M<1 THEN 3180
  172. 3160 P=P*2:GOTO 3112
  173. 3180 COLOR 0,7:LOCATE 10,2:PRINT" GAME OVER ":LOCATE 12,2
  174. 3181 IF K=79 THEN PRINT" YOU QUIT ":GOTO 3188
  175. 3182 IF M<1 THEN PRINT" YOU USED UP ALL YOUR TIME, SORRY ":GOTO 3188
  176. 3183 IF M>300 THEN PRINT" EXCELLENT! YOU ARE NOW PRESIDENT. " ELSE IF M>100 THEN PRINT" GOOD! YOU ARE NOW VICE PRESIDENT. " ELSE PRINT" DO IT FASTER NEXT TIME! "
  177. 3188 Y=14:GOSUB 1310 SPACE:IF X$<>" " THEN 3188
  178. 3190 RETURN
  179. 3200 '
  180. 3201 'secret message
  181. 3210 COLOR 31,0:CLS
  182. 3220 LOCATE  6,10:PRINT"SECRET MESSAGE FOR YOU"
  183. 3230 LOCATE  9,10:PRINT"NEXT TIME YOU RUN"
  184. 3240 LOCATE 11,10:PRINT"THIS PROGRAM, HIT"
  185. 3250 LOCATE 13,10:PRINT"``F3'' (INSTEAD OF SPACE)."
  186. 3260 LOCATE 15,10:PRINT"YOU'LL GO RIGHT TO"
  187. 3270 LOCATE 17,10:PRINT"QUICK MENU. <ARCHIE>"
  188. 3280 X=14:Y=22:GOSUB 1310:'hit space when ready
  189. 3290 RETURN
  190. 3300 '
  191. 3301 'color/mono switch
  192. 3310 COLOR 15,8:CLS
  193. 3320 PRINT:PRINT:PRINT"  SECRET MENU FOR YOU ":PRINT:PRINT:PRINT"  SELECTION      RESULT"
  194. 3330 PRINT:PRINT:PRINT"                  Switch to IBM Mono                                Display"
  195. 3340 PRINT:PRINT:PRINT"                  Switch to TV or                                   Monitor"
  196. 3350 PRINT:PRINT:PRINT:PRINT:PRINT"                  BACK TO MAIN MENU"
  197. 3352 COLOR 0,7,0:Y=8:X=2:J$=" F1 ":GOSUB 4210 BOX:Y=12:J$=" F2 ":GOSUB 4210 BOX:Y=18:J$="  SPACE  ":GOSUB 4210 BOX:COLOR 15,8
  198. 3360 Y=23:GOSUB 1410 CHOICE
  199. 3362 X$=LEFT$(X$,1):IF X$="m" THEN 3370 ELSE IF X$="c" THEN 3375 ELSE 3390
  200. 3370 CLS:WIDTH 40: DEF SEG=0: A=PEEK(&H410): POKE &H410,A OR &H30
  201. 3372 LOCATE 1,1,0,12,13:OUT 948,2:OUT 949,62:'center 40 col on IBM mono
  202. 3374 GOTO 3380
  203. 3375 WIDTH 80: DEF SEG=0: A=PEEK(&H410): POKE &H410,(A AND &HCF) OR &H20
  204. 3380 SCREEN 0,1,0:WIDTH 80:COLOR 0,0,0:CLS:WIDTH 40:COLOR 0,7,0:KEY OFF:LOCATE 1,1,0
  205. 3382 DEF SEG=0:IF (PEEK(&H410) AND &H30)=&H30 THEN LOCATE 1,1,0,12,13:OUT 948,2:OUT 949,62:'IBM mono display
  206. 3384 DEF SEG=0:IF (PEEK(&H410) AND &H30)<>&H30 THEN LOCATE 1,1,0,6,7:'TV/mon
  207. 3390 RETURN
  208. 3400 '
  209. 4100 '
  210. 4101 'box sr single lines
  211. 4110 L=LEN(J$):LOCATE Y,X:PRINT CHR$(218);:FOR I=1 TO L:PRINT CHR$(196);:NEXT:PRINT CHR$(191);
  212. 4120 LOCATE Y+1,X:PRINT CHR$(179)+J$+CHR$(179);
  213. 4130 LOCATE Y+2,X:PRINT CHR$(192);:FOR I=1 TO L:PRINT CHR$(196);:NEXT:PRINT CHR$(217);
  214. 4190 RETURN
  215. 4200 '
  216. 4201 'box sr double lines
  217. 4210 L=LEN(J$):LOCATE Y,X:PRINT CHR$(201);:FOR I=1 TO L:PRINT CHR$(205);:NEXT:PRINT CHR$(187);
  218. 4220 LOCATE Y+1,X:PRINT CHR$(186)+J$+CHR$(186);
  219. 4230 LOCATE Y+2,X:PRINT CHR$(200);:FOR I=1 TO L:PRINT CHR$(205);:NEXT:PRINT CHR$(188);
  220. 4290 RETURN
  221. 4300 '
  222. 4301 'box sr shadow top
  223. 4310 L=LEN(J$):LOCATE Y,X:PRINT CHR$(218);:FOR I=1 TO L:PRINT CHR$(196);:NEXT:PRINT CHR$(183);
  224. 4320 LOCATE Y+1,X:PRINT CHR$(179)+J$+CHR$(186);
  225. 4330 LOCATE Y+2,X:PRINT CHR$(212);:FOR I=1 TO L:PRINT CHR$(205);:NEXT:PRINT CHR$(188);
  226. 4390 RETURN
  227. 4400 '
  228. 4401 'box sr shadow bot
  229. 4410 L=LEN(J$):LOCATE Y,X:PRINT CHR$(201);:FOR I=1 TO L:PRINT CHR$(205);:NEXT:PRINT CHR$(184);
  230. 4420 LOCATE Y+1,X:PRINT CHR$(186)+J$+CHR$(179);
  231. 4430 LOCATE Y+2,X:PRINT CHR$(211);:FOR I=1 TO L:PRINT CHR$(196);:NEXT:PRINT CHR$(217);
  232. 4490 RETURN
  233. 4500 '
  234. 4501 'box sr char=ASC(c)
  235. 4510 IF C=0 OR (C>6 AND C<14) OR (C>27 AND C<33) OR C=255 THEN 10520 ELSE 10530
  236. 4520 IF C=10 THEN C=219
  237. 4521 IF C=11 THEN C=176
  238. 4522 IF C=12 THEN C=177
  239. 4523 IF C=13 THEN C=178
  240. 4524 IF (C<10 OR C>13) AND C<>219 AND C<>176 AND C<>177 AND C<>178 THEN C=254
  241. 4530 L=LEN(J$):LOCATE Y,X:PRINT CHR$(C);:FOR I=1 TO L:PRINT CHR$(C);:NEXT:PRINT CHR$(C);
  242. 4540 LOCATE Y+1,X:PRINT CHR$(C)+J$+CHR$(C);
  243. 4550 LOCATE Y+2,X:PRINT CHR$(C);:FOR I=1 TO L:PRINT CHR$(C);:NEXT:PRINT CHR$(C);
  244. 4590 RETURN
  245. 4600 '
  246. 4601 'line sr single line
  247. 4610 J=U-X:K=V-Y:G=-(J>0)+(J<0):H=-(K>0)+(K<0):'x,y = start, u,v = end, g tells horiz dir, h tells vert dir
  248. 4620 IF G=0 THEN 4630 ELSE FOR I=0 TO J STEP G:LOCATE Y,X+I:PRINT CHR$(196);:NEXT:LOCATE Y,U
  249. 4622 PRINT CHR$(-191*(J>0 AND K>0)-192*(J<0 AND K<0)-218*(J<0 AND K>0)-217*(J>0 AND K<0));
  250. 4630 IF H=0 THEN 4640 ELSE FOR I=0 TO K-H STEP H:LOCATE Y+H*(1+ABS(I)),U:PRINT CHR$(179);:NEXT
  251. 4640 LOCATE V,U:PRINT CHR$(-24*((J=0 AND K<0)+(J>0 AND K<0)+(J<0 AND K<0))-25*((J=0 AND K>0)+(J<0 AND K>0)+(J>0 AND K>0))-16*(J>0 AND K=0)-17*(J<0 AND K=0));
  252. 4690 RETURN
  253. 4700 '
  254. 4701 'line sr double line
  255. 4710 J=U-X:K=V-Y:G=-(J>0)+(J<0):H=-(K>0)+(K<0):'x,y = start, u,v = end, g tells horiz dir, h tells vert dir
  256. 4720 IF G=0 THEN 4730 ELSE FOR I=0 TO J STEP G:LOCATE Y,X+I:PRINT CHR$(205);:NEXT:LOCATE Y,U:PRINT CHR$(206);
  257. 4722 PRINT CHR$(-187*(J>0 AND K>0)-200*(J<0 AND K<0)-201*(J<0 AND K>0)-188*(J>0 AND K<0));
  258. 4730 IF H=0 THEN 4740 ELSE FOR I=0 TO K-H STEP H:LOCATE Y+H*(1+ABS(I)),U:PRINT CHR$(186);:NEXT
  259. 4740 LOCATE V,U:PRINT CHR$(-24*((J=0 AND K<0)+(J>0 AND K<0)+(J<0 AND K<0))-25*((J=0 AND K>0)+(J<0 AND K>0)+(J>0 AND K>0))-16*(J>0 AND K=0)-17*(J<0 AND K=0));
  260. 4790 RETURN
  261. 4800 '
  262. 5000 '
  263. 5100 '
  264. 5101 'initializing/copyright
  265. 5110 CLS
  266. 5120 LOCATE  6, 9:COLOR 1,7:PRINT "ARCHIE THE COCKROACH":COLOR 0,7
  267. 5130 LOCATE  9,10:PRINT "o  A Song"
  268. 5140 LOCATE 11,10:PRINT "o  A Quiz"
  269. 5150 LOCATE 13,10:PRINT "o  A Game"
  270. 5160 LOCATE 15,10:PRINT "o  How to Do"
  271. 5162 LOCATE 16,10:PRINT "    Almost Painless"
  272. 5164 LOCATE 17,10:PRINT "    Structured BASIC"
  273. 5180 LOCATE 21,2:PRINT "COPYRIGHT (c) 1982 IRA GLICKSTEIN       RD#1 BOX 363 APALACHIN NY  607-625-3366";
  274. 5181 LOCATE 23,2:PRINT"NOTE:  Non-commercial copy allowed if          this notice is included."
  275. 5182 COLOR 22,7:LOCATE 2,2:PRINT " INITIALIZING ":COLOR 0,7
  276. 5190 RETURN
  277. 5200 '
  278. 5201 'gobbledegook sr
  279. 5210 CLS:X=FRE(""):KEY ON:KEY OFF:K=1+INT(10*RND(1)):IF K$=CHR$(98)+CHR$(121)+CHR$(63) THEN 5230 ELSE 21110
  280. 5220 GOTO 5290
  281. 5230 RESTORE 30070:I=0:CLS
  282. 5240 I=I+1:READ J:IF J<0 THEN 5280 ELSE PRINT CHR$(J-I*I);:GOTO 5240
  283. 5280 Y=25:GOSUB 1310 SPACE
  284. 5290 RETURN
  285. 5900 '
  286. 5901 'exit program
  287. 5910 COLOR 15,3:CLS
  288. 5920 LOCATE  6, 9:PRINT "ARCHIE THE COCKROACH"
  289. 5930 LOCATE  9,10:PRINT "o  A Song"
  290. 5940 LOCATE 11,10:PRINT "o  A Quiz"
  291. 5950 LOCATE 13,10:PRINT "o  A Game"
  292. 5960 LOCATE 15,10:PRINT "o  How to Do"
  293. 5962 LOCATE 16,10:PRINT "    Almost Painless"
  294. 5964 LOCATE 17,10:PRINT "    Structured BASIC"
  295. 5980 LOCATE 21,2:PRINT "COPYRIGHT (c) 1982 IRA GLICKSTEIN       RD#1 BOX 363 APALACHIN NY  607-625-3366";
  296. 5982 COLOR 23,0:LOCATE 25,2:PRINT " THANKS FOR PLAYING  .IRA GLICKSTEIN/ ":COLOR 7,0:LOCATE 1,1
  297. 5989 Q=9
  298. 5990 RETURN
  299. 6000 '
  300. 6001 'quiz - senior sr
  301. 6010 GOSUB 6110:'get name
  302. 6012 PRINT" "+F$+", DO YOU WANT TO ANSWER":PRINT" QUESTIONS ABOUT COCKROACHES (Y/N)?"
  303. 6014 Y=24:GOSUB 1410 CHOICE:IF X$<>"y" AND X$<>"Y" THEN 6090:'quit
  304. 6020 GOSUB 6210:'question 1
  305. 6030 GOSUB 6310:'question 2
  306. 6040 GOSUB 6410:'question 3
  307. 6050 GOSUB 6510:'question 4
  308. 6090 RETURN
  309. 6100 '
  310. 6101 'get users name
  311. 6110 COLOR 0,0,0:CLS:COLOR 0,7,7:LOCATE 25,1:PRINT"                                        ":LOCATE 24,1:PRINT:PRINT "  "+C$(2)+"CUCARACHA QUIZ"+C$(3):Y=24
  312. 6120 PRINT:PRINT " What do they call you?"
  313. 6122 PRINT "  (please enter name and hit RETURN)"
  314. 6130 PRINT:INPUT N$:F$=N$
  315. 6140 K=0:FOR I=LEN(F$) TO 1 STEP -1:IF MID$(F$,I,1 )=" " THEN K=I
  316. 6142  NEXT
  317. 6144 IF K<>0 THEN 6150
  318. 6148  PRINT:PRINT" That's NOT your FULL name !":GOTO 6122
  319. 6150 F$=MID$(N$,1,K-1):IF LEN(F$)>10 THEN F$=LEFT$(F$,10):PRINT " GIVE ME A BREAK !":GOTO 6140
  320. 6152 PRINT:PRINT " HI, ";:COLOR 1,7:PRINT N$;:COLOR 0,7:PRINT ","
  321. 6154 PRINT:PRINT " May I call you ";:COLOR 1,7:PRINT F$;:COLOR 0,7:PRINT" (Y/N) ?"
  322. 6156 PRINT:Y=24:GOSUB 1410 CHOICE:PRINT
  323. 6160 IF MID$(X$,1,1)<>"y" AND MID$(X$,1,1)<>"Y" THEN IF LEN(N$)>11 THEN F$=LEFT$(N$,LEN(F$)+2)+"~" ELSE F$=N$
  324. 6162 PRINT " OK, ";:COLOR 1,7:PRINT F$;:COLOR 0,7:PRINT ","
  325. 6164 PRINT:PRINT "  -- THAT'S A NICE NAME FOR A ";:COLOR 1,7:PRINT "COCKROACH";:COLOR 0,7:PRINT "!"
  326. 6180 FOR I=32 TO 1 STEP -1:F=1-(F=1):LOCATE 21,I:PRINT C$(F);:SOUND 32767,4:NEXT:PRINT:PRINT:PRINT:PRINT
  327. 6190 RETURN
  328. 6200 '
  329. 6201 'question 1
  330. 6210 COLOR 0,7,7:CLS:LOCATE 2,2:PRINT C$(2)+"CUCARACHA QUIZ"+C$(3):Y=22:X=10
  331. 6211 LOCATE 5,2:PRINT" ``Cockroaches'' are called:"
  332. 6212 PRINT " 1 -- ``Schaben'' in German"
  333. 6213 PRINT " 2 -- ``Blattes'' in French
  334. 6214 PRINT " 3 -- ``Cucarachas'' in Spanish"
  335. 6215 PRINT " 4 -- All of the above"
  336. 6216 PRINT " 5 -- None of the above"
  337. 6220 PRINT:GOSUB 1410 CHOICE:LOCATE 12,1:K=ASC(X$)-48:IF K<1 OR K>5 THEN 6210
  338. 6230 IF K<>4 THEN PRINT:PRINT" WRONG -- 4 is correct"
  339. 6240 IF K=4 THEN PRINT:PRINT" CORRECT !!!"
  340. 6250 PRINT:PRINT:PRINT" Roaches are very common -- there is a   word for them in nearly all languages.":GOSUB 1310 SPACE
  341. 6290 RETURN
  342. 6300 '
  343. 6301 'question 2
  344. 6310 CLS:LOCATE 2,2:PRINT C$(2)+"CUCARACHA QUIZ"+C$(3):Y=22:X=10
  345. 6311 LOCATE 5,2:PRINT" Cockroaches spread disease by walking"
  346. 6312 PRINT " over filth and then onto food."
  347. 6320 PRINT " T -- True"
  348. 6321 PRINT " F -- False"
  349. 6330 PRINT:GOSUB 1410 CHOICE:LOCATE 12,1:IF X$<>"T" AND X$<>"t" AND X$<>"F" AND X$<>"f" THEN 6310
  350. 6340 PRINT:PRINT:PRINT" FALSE -- This has actually never been   proved.":GOSUB 1310 SPACE
  351. 6390 RETURN
  352. 6400 '
  353. 6401 'question 3
  354. 6410 CLS:LOCATE 2,2:PRINT C$(2)+"CUCARACHA QUIZ"+C$(3):Y=22:X=10
  355. 6411 LOCATE 5,2:PRINT" Because roaches are repelled by light,  their presence is often unsuspected."
  356. 6420 PRINT " T -- True"
  357. 6421 PRINT " F -- False"
  358. 6430 PRINT:GOSUB 1410 CHOICE:LOCATE 12,1:IF X$<>"T" AND X$<>"t" AND X$<>"F" AND X$<>"f" THEN 6410
  359. 6440 PRINT:PRINT:PRINT" TRUE -- They are usually noticed only   when lights are turned on at night and  they scurry for cover in the darkness   of cracks.  They can flatten their      bodies to conceal themselves.":GOSUB 1310 CHOICE
  360. 6490 RETURN
  361. 6500 '
  362. 6501 'question 4
  363. 6510 CLS:LOCATE 2,2:PRINT C$(2)+"CUCARACHA QUIZ"+C$(3):Y=22:X=10
  364. 6511 LOCATE 5,2:PRINT" Roaches are smarter than ants"
  365. 6520 PRINT " T -- True"
  366. 6521 PRINT " F -- False"
  367. 6530 PRINT:GOSUB 1410 CHOICE:LOCATE 12,1:IF X$<>"T" AND X$<>"t" AND X$<>"F" AND X$<>"f" THEN 6510
  368. 6540 PRINT:PRINT:PRINT" Both TRUE and FALSE - American roaches  have limited ability (compared with     ants) to find their way through a       simple maze.  However, they have"
  369. 6542 PRINT " better memories than ants, and learned  to avoid cracks when given a weak       electrical shock.":GOSUB 1310 SPACE
  370. 6590 RETURN
  371. 6600 '
  372. 7000 '
  373. 7001 'hi i'm archie - senior sr
  374. 7010 KEY ON:GOSUB 7110:'intro
  375. 7020 GOSUB 7210:'my name
  376. 7030 GOSUB 7310:'loose wire
  377. 7040 GOSUB 710:'fix wire
  378. 7050 GOSUB 7410:'about bugs
  379. 7080 KEY OFF:DEF SEG:POKE 106,0
  380. 7090 RETURN
  381. 7100 '
  382. 7101 'hi i'm archie - intro
  383. 7110 FOR I=2 TO 23:FOR H=0 TO 2:LOCATE I+(H=0),1:PRINT C$(H);:SOUND I*100,1:NEXT:NEXT
  384. 7120 COLOR 7,0:CLS:COLOR 0,7
  385. 7130 LOCATE 24,1:PRINT:LOCATE 24,6:PRINT C$(2);
  386. 7140 FOR I=6 TO 1 STEP -1:PRINT:SOUND I*387,1:SOUND 32767,8:NEXT
  387. 7150 LOCATE 18,6:PRINT C$(0);
  388. 7190 RETURN
  389. 7200 '
  390. 7201 'hi i'm archie - my name
  391. 7210 J$=" ``la cucaracha'' - my favorite.":GOSUB 2210 TYPE-DELAY:GOSUB 1110 TYPE
  392. 7220 J$=" i'm archie the cockroach.":GOSUB 2210 TYPE-DELAY:GOSUB 1110 TYPE
  393. 7230 J$=" in spanish my name is":GOSUB 1110 TYPE
  394. 7240 J$="``archie la cucaracha.''":GOSUB 2210 TYPE-DELAY:GOSUB 1110 TYPE
  395. 7250 J$=" i type in lower case `cause":GOSUB 1110 TYPE
  396. 7260 J$="i can't hold the shift key.":GOSUB 2210 TYPE-DELAY
  397. 7290 RETURN
  398. 7300 '
  399. 7301 'hi i'm archie - loose wire
  400. 7310 GOSUB 7380:'loose wire
  401. 7320 J$=" oops -- i see a loose wire":GOSUB 1110 TYPE:GOSUB 7380:'loose wire
  402. 7330 J$="by the function keys.":GOSUB 1110 TYPE:GOSUB 7380:J$="   ":GOSUB 1110 TYPE:GOSUB 7380
  403. 7340 J$=" i'll hold the wire while you":GOSUB 1110 TYPE:GOSUB 7380
  404. 7350 J$="hit ``f3'' and i bet this thing":GOSUB 1110 TYPE:GOSUB 7380
  405. 7360 J$="will shift to upper case.":GOSUB 1100 TYPE:GOSUB 7380:J$="  ":GOSUB 1110 TYPE:GOSUB 7380
  406. 7380 R=1+3*RND(1):FOR I=1 TO R:KEY OFF:LOCATE 25,1:PRINT Z$;:SOUND 370*I,1:SOUND 37,0:SOUND 32767,5:SOUND 37*I,1:KEY ON:SOUND 730*I,1:SOUND 37,0:NEXT:RETURN
  407. 7390 RETURN
  408. 7401 'hi i'm archie - about bugs
  409. 7410 KEY ON:J$=" THANKS !":GOSUB 2210 TYPE-DELAY:GOSUB 1110 TYPE
  410. 7420 J$=" LUCKY I FIXED THAT LOOSE WIRE.":GOSUB 2210 TYPE-DELAY
  411. 7430 J$=" MOST OF THE TIME, I CAN'T":GOSUB 1110 TYPE
  412. 7440 J$="FIX TOUGH HARDWARE BUGS.":GOSUB 2210 TYPE-DELAY
  413. 7450 J$=" SOFTWARE BUGS ARE EASIER !!!":GOSUB 2210 TYPE-DELAY
  414. 7460 J$=" YOU SEE, I'M THE ORIGINAL":GOSUB 1110 TYPE
  415. 7470 J$="SOFTWARE"+C$(2)+"BUG !!!":GOSUB 2210 TYPE-DELAY:GOSUB 1110 TYPE
  416. 7480 J$=" WHEN I'M IN YOUR PROGRAM,":GOSUB 1110 TYPE
  417. 7482 J$="DON'T GET MAD AT ME --":GOSUB 2210 TYPE-DELAY
  418. 7484 J$=" YOU PUT ME THERE - I TRY AS":GOSUB 1110 TYPE
  419. 7486 J$="HARD AS I CAN TO GET OUT !!!":GOSUB 1110 TYPE
  420. 7488 Y=23:GOSUB 1310 CHOICE
  421. 7490 RETURN
  422. 7500 '
  423. 8000 '
  424. 8001 'sing along - senior sr
  425. 8010 GOSUB 8110:'first verse
  426. 8020 LOCATE 23,2:PRINT"MORE (Y/N) ?":Y=24:GOSUB 1410 CHOICE:IF X$="N" OR X$="n" THEN 8090:'quit
  427. 8030 GOSUB 8210:'second verse
  428. 8040 LOCATE 23,2:PRINT"MORE (Y/N) ?":Y=24:GOSUB 1410 CHOICE:IF X$="N" OR X$="n" THEN 8090 ELSE 8010
  429. 8090 RETURN
  430. 8100 '
  431. 8101 'sing along - first verse
  432. 8110 COLOR 15,6:CLS:LOCATE 2,6:PRINT"SING ALONG WITH MEHITABEL   -1-"
  433. 8120 LOCATE 5,2:PRINT"La Cu-Ca-RA-Cha !";
  434. 8122 LOCATE 7,2:PRINT"  La Cu-Ca-RA-Cha !";
  435. 8130 LOCATE 9,2:PRINT"Ar-chie is a";
  436. 8132 LOCATE 11,2:PRINT"  Friend of mine . . .";
  437. 8140 LOCATE 13,2:PRINT"La Cu-Ca-RA-Cha !";
  438. 8142 LOCATE 15,2:PRINT"  La Cu-Ca-RA-Cha !";
  439. 8150 LOCATE 17,2:PRINT"A Fin-er friend";
  440. 8152 LOCATE 19,2:PRINT"  You'll never find !!!";
  441. 8160 GOSUB 1510 SONG
  442. 8190 RETURN
  443. 8201 'sing along - second verse
  444. 8210 COLOR 15,3:CLS:LOCATE 2,6:PRINT"SING ALONG WITH MEHITABEL   -2-"
  445. 8220 LOCATE 5,2:PRINT"If SOFT-ware bugs you!";
  446. 8222 LOCATE 7,2:PRINT" If SOFT-ware bugs you!";
  447. 8230 LOCATE 9,2:PRINT"You can give";
  448. 8232 LOCATE 11,2:PRINT" Yourself a break . .";
  449. 8240 LOCATE 13,2:PRINT"Use STRUCT-ured BAS-IC";
  450. 8242 LOCATE 15,2:PRINT" Use STRUCT-ured BAS-IC";
  451. 8250 LOCATE 17,2:PRINT"Do it right for";
  452. 8252 LOCATE 19,2:PRINT" Hea-ven's sake !!!";
  453. 8260 GOSUB 1510 SONG
  454. 8290 RETURN
  455. 9000 '
  456. 10000 '
  457. 10001 'structured BASIC - senior sr
  458. 10010 COLOR 0,7,0:CLS:KEY OFF:LOCATE 2,2:PRINT" ALMOST PAINLESS STRUCTURED BASIC":LOCATE 4,2:PRINT C$(2)+"  Select by Number  "+C$(3)
  459. 10020 LOCATE 8,2:PRINT"1 -- THE PROBLEM"
  460. 10030 LOCATE 10,2:PRINT"2 -- A STRUCTURED APPROACH"
  461. 10040 LOCATE 12,2:PRINT"3 -- HOW TO MAKE YOUR LIFE EASIER"
  462. 10050 LOCATE 20,2:PRINT"9 -- BACK TO MAIN MENU"
  463. 10070 Y=23:GOSUB 1410 CHOICE:K=ASC(X$)-48:IF K <1 OR K>4 AND K<>9 THEN 10070 ELSE IF K=9 THEN 10090:'9=quit
  464. 10080 ON ASC(X$)-48 GOSUB 11010,12010,13010:'1=problem 2=approach 3=how
  465. 10082 GOTO 10010
  466. 10090 RETURN
  467. 11001 'the problem - senior sr
  468. 11010 D=D*1000
  469. 11020 GOSUB 11110:'intro
  470. 11030 GOSUB 11210:'more processes
  471. 11040 GOSUB 11310:'still more
  472. 11050 GOSUB 11410:'even more
  473. 11060 GOSUB 11510:'spaghetti
  474. 11070 GOSUB 11610:'dinner time
  475. 11080 D=D/1000
  476. 11090 RETURN
  477. 11100 '
  478. 11101 'the problem - intro
  479. 11110 COLOR 15,2,2:CLS:LOCATE 16,2:PRINT"A PROGRAM IS LIKE A TRAIN":COLOR 7,2
  480. 11112 LOCATE 18,1:PRINT"Initialization comes first,               then INPUT of requests or data,         then PROCESSING, and                    then OUTPUT of results."
  481. 11120 J$=CHR$(2)+"KINITK>[[INPUT[[PROCESS[[OUTPUT[[[[[["
  482. 11130 COLOR 0,7:Y=8:GOSUB 810:COLOR 7,2
  483. 11150 LOCATE Y,9:PRINT CHR$(205)+CHR$(16);:LOCATE Y,16:PRINT CHR$(205)+CHR$(16);:LOCATE Y,25:PRINT CHR$(205)+CHR$(16);:LOCATE Y,33:PRINT"      ";
  484. 11180 Y=24:GOSUB 1310 SPACE
  485. 11190 RETURN
  486. 11200 '
  487. 11201 'the problem - more processes
  488. 11210 COLOR 15,2:LOCATE 16,2:PRINT"SOMETIMES, YOU HAVE TO MAKE CHOICES":COLOR 7,2
  489. 11212 LOCATE 18,1:PRINT"Depending on the INPUTs,                  and intermediate results,               you may require different PROCESSes.                                         "
  490. 11220 COLOR 0,7:LOCATE 4,15:PRINT "PROC A";:LOCATE 12,15:PRINT"PROC B";
  491. 11230 COLOR 7,2:X=15:Y=8:U=15:V=5:GOSUB 4610 LINE
  492. 11240 Y=8:V=11:GOSUB 4610 LINE
  493. 11250 X=22:Y=4:U=23:V=7:GOSUB 4610 LINE
  494. 11260 Y=12:U=30:V=9:GOSUB 4610 LINE
  495. 11270 LOCATE 8,16:PRINT"D";
  496. 11280 Y=24:GOSUB 1310 SPACE
  497. 11290 RETURN
  498. 11300 '
  499. 11301 'the problem - still more
  500. 11310 COLOR 15,2:LOCATE 16,2:PRINT"THINGS CAN GET CONFUSED.              ":COLOR 7,2
  501. 11312 LOCATE 18,1:PRINT"Depending on the OUTPUTs,                 and intermediate results,               you may require different INPUTs.                                           "
  502. 11320 COLOR 0,7:LOCATE 5,9:PRINT "IN A";:LOCATE 10,8:PRINT"IN B";:LOCATE 2,23:PRINT"PROC C";
  503. 11330 COLOR 7,2:X=13:Y=5:U=14:V=7:GOSUB 4610 LINE
  504. 11340 X=11:Y=10:U=18:V=9:GOSUB 4610 LINE
  505. 11350 X=14:Y=12:U=8:V=11:GOSUB 4610 LINE
  506. 11360 X=28:Y=8:U=28:V=3:GOSUB 4610 LINE
  507. 11362 X=22:Y=2:U=10:V=4:GOSUB 4610 LINE
  508. 11370 LOCATE 8,25:PRINT"D";
  509. 11380 Y=24:GOSUB 1310 SPACE
  510. 11390 RETURN
  511. 11400 '
  512. 11401 'the problem - even more
  513. 11410 COLOR 15,2:LOCATE 16,2:PRINT"YOU CAN ALWAYS ADD TO YOUR PROGRAM.   ":COLOR 7,2
  514. 11412 LOCATE 18,1:PRINT"As your program develops, you think of    more choices and better features.     You GOTO a higher line number and add     more (including a"+C$(2);:PRINT"or two)."
  515. 11420 COLOR 0,7:LOCATE 4,24:PRINT "SR";:LOCATE 6,31:PRINT"SR";:LOCATE 12,24:PRINT C$(2);
  516. 11430 COLOR 7,2:X=24:Y=3:U=24:V=3:GOSUB 4610 LINE
  517. 11440 X=24:Y=8:U=24:V=5:GOSUB 4610 LINE
  518. 11450 X=26:Y=4:U=30:V=7:GOSUB 4610 LINE
  519. 11460 X=32:Y=8:U=32:V=7:GOSUB 4610 LINE
  520. 11462 X=30:Y=6:U=3:V=7:GOSUB 4610 LINE
  521. 11480 Y=24:GOSUB 1310 SPACE
  522. 11490 RETURN
  523. 11500 '
  524. 11501 'the problem - spaghetti
  525. 11510 COLOR 15,2:LOCATE 16,2:PRINT"THE MORE YOU ADD, THE LESS IT WORKS!  ":COLOR 7,2
  526. 11512 LOCATE 18,1:PRINT"The program doesn't work all the time.    You have `spaghetti' logic, and         all you need is some tomato sauce       and a few meat balls !!!             "
  527. 11520 LOCATE 4,3:PRINT "PROC E";:LOCATE 6,6:PRINT"???";:LOCATE 10,3:PRINT "GOTO";:LOCATE 12,11:PRINT"SR";:LOCATE 10,19:PRINT"OUT A";:LOCATE 6,14:PRINT C$(3);
  528. 11530 COLOR 15,2:X=20:Y=10:U=20:V=5:GOSUB 4610 LINE
  529. 11540 X=22:Y=2:U=2:V=3:GOSUB 4610 LINE
  530. 11550 X=10:Y=12:U=4:V=11:GOSUB 4610 LINE
  531. 11560 X=24:Y=10:U=8:V=9:GOSUB 4610 LINE
  532. 11562 X=9:Y=4:U=19:V=5:GOSUB 4610 LINE
  533. 11580 RESTORE 30080:FOR L=1 TO 30:X=3+32*RND(1):Y=2+10*RND(1):U=3+32*RND(1):V=2+10*RND(1):GOSUB 4610 LINE:READ J:SOUND J,1:NEXT
  534. 11590 RETURN
  535. 11600 '
  536. 11601 'the problem - dinner time
  537. 11610 COLOR 15,2:LOCATE 16,2:PRINT"A FINE ``SPAGHETTI'' DINNER !!!       ":COLOR 7,2
  538. 11620 X=30:Y=10:GOSUB 11650:X=24:Y=3:GOSUB 11650:X=11:Y=11:GOSUB 11650:X=5:Y=4:GOSUB 11650:X=16:Y=6:GOSUB 11650
  539. 11640 GOTO 11670
  540. 11650 COLOR 4,6:LOCATE Y,X:PRINT "221121122";:LOCATE Y+1,X+1:PRINT"2211112";:LOCATE Y+2,X+2:PRINT"21122";:LOCATE Y-1,X+1:PRINT"2111122";:LOCATE Y-2,X+2:PRINT"22102";:SOUND 370,1:SOUND 1370,2:SOUND 2370,3:RETURN
  541. 11670 COLOR 15,2:LOCATE 18,1:PRINT"Economical, yet nutricious and filling.                                           Delicious !!!                                        (pass the garlic bread)"
  542. 11680 Y=24:GOSUB 1310 SPACE
  543. 11690 RETURN
  544. 11700 '
  545. 12000 '
  546. 12001 'structured approach - senior sr
  547. 12010 D=D*1000
  548. 12020 GOSUB 12110:'intro
  549. 12030 GOSUB 12210:'2
  550. 12040 GOSUB 12410:'3 (not an
  551. 12050 GOSUB 12310:'4  error)
  552. 12060 GOSUB 12510:'5
  553. 12070 GOSUB 12610:'6
  554. 12080 D=D/1000
  555. 12090 RETURN
  556. 12100 ,
  557. 12101 'structured approach - intro
  558. 12110 COLOR 0,7,0:CLS
  559. 12120 PRINT"      A STRUCTURED APPROACH          -1"
  560. 12130 PRINT:PRINT:PRINT" A personal note to you - "+F$
  561. 12140 PRINT:PRINT:PRINT"  I'm an engineer, but some of my best   friends, including my wife, are         "+Q$+"programmers."+Q$
  562. 12150 PRINT:PRINT"  I used to think APL was the only       civilized computer language."
  563. 12160 PRINT:PRINT"  Three years with BASIC on my home      computer changed my mind."
  564. 12170 PRINT:PRINT"  I like BASIC, but I learned the hard   way how easy it is to get lost among    the software"+C$(1)+"bugs !!!"
  565. 12180 Y=24:GOSUB 1310 SPACE
  566. 12190 RETURN
  567. 12200 '
  568. 12201 'approach - 2
  569. 12210 CLS:PRINT"      A STRUCTURED APPROACH          -2"
  570. 12220 LOCATE 4,1:PRINT"  I write programs in small modules.     Each module can fit on the TV screen."
  571. 12230 PRINT:PRINT"  (I learned to do this in self-defense  - I didn't have a printer.)"
  572. 12240 PRINT:PRINT"  Each module has 100 line numbers.  I   always put first line of code at #10,   and exit at line #99.  Only one         entrance and one exit per module!"
  573. 12250 PRINT:PRINT"  GOTOs are trouble. I love spaghetti,   but not in my programs!  I never use    GOTOs, except within a module."
  574. 12260 PRINT:PRINT"  I use GOSUBs to subroutines.  I always RETURN to the MAIN LINE PROGRAM."
  575. 12280 Y=24:GOSUB 1310 SPACE
  576. 12290 RETURN
  577. 12300 '
  578. 12301 'approach - 3
  579. 12310 CLS:PRINT"      A STRUCTURED APPROACH          -4"
  580. 12320 PRINT:PRINT:PRINT"  A BASIC interpreter runs modules       faster when they are at low line        numbers.  I always put speed-critical   subroutines at low line numbers."
  581. 12330 PRINT:PRINT"  To leave room for subroutines at low   line numbers, I always use #20000 for   INITIALIZATION, and #21000 for the      MAIN LINE PROGRAM.  It's easy to        remember.  I'm consistent."
  582. 12340 PRINT:PRINT"  I gain speed with single-letter        variable naφe≤.áá╘Φi≤ác⌡t≤át∙≡o'≤¼ááááááßεΣá⌡ε≤trßiε≤áφ∙áΦeßΣ-Γoεe.áá(I have    picked a few good letters.  I use       them consistently.)"
  583. 12380 Y=24:GOSUB 1310 SPACE
  584. 12390 RETURN
  585. 12400 '
  586. 12401 'approach - 3
  587. 12410 CLS:PRINT"      A STRUCTURED APPROACH          -3"
  588. 12420 PRINT:PRINT:PRINT"  INITIALIZATION and the MAI:COLOR 15,0:GOSUB 810 TRAIN:COLOR 0,7
  589. 12430 LOCATE 10,1:PRINT"  I do INITIALIZATION in a module or a   series of modules.  I usually include   a few remarks about what each variable  is supposed to do for a living."
  590. 12440 PRINT:PRINT"  My MAIN LINE PROGRAM consists mainly   of GOSUBs to subroutines that do the    real work."
  591. 12450 PRINT:PRINT"  My friend Archie, the original         software";:PRINT C$(1)+"bug, can easily find":PRINT" his way OUT of my programs!"
  592. 12452 Y=24:GOSUB 1310 SPACE
  593. 12460 RESTORE 30080:FOR I=9 TO 23:LOCATE I,1:PRINT "                                        ";:READ J:SOUND J,1:NEXT
  594. 12462 COLOR 15,0:LOCATE 11,5:PRINT"SR";:LOCATE 11,20:PRINT"SR";:LOCATE 11,25:PRINT"SR~~~";:LOCATE 11,35:PRINT"SR";:LOCATE 14,25:PRINT"SR";:LOCATE 14,28:PRINT"SR";
  595. 12464 COLOR 0,7:X=5:Y=8:U=5:V=10:GOSUB 4610 LINE:X=6:Y=11:U=6:V=9:GOSUB 4610 LINE
  596. 12465 X=20:Y=8:U=20:V=10:GOSUB 4610 LINE:X=21:Y=11:U=21:V=9:GOSUB 4610 LINE
  597. 12466 X=25:Y=8:U=25:V=10:GOSUB 4610 LINE:X=26:Y=11:U=26:V=9:GOSUB 4610 LINE
  598. 12467 X=35:Y=8:U=35:V=10:GOSUB 4610 LINE:X=36:Y=11:U=36:V=9:GOSUB 4610 LINE
  599. 12468 X=25:Y=11:U=25:V=13:GOSUB 4610 LINE:X=26:Y=14:U=26:V=12:GOSUB 4610 LINE
  600. 12469 X=28:Y=11:U=28:V=13:GOSUB 4610 LINE:X=29:Y=14:U=29:V=12:GOSUB 4610 LINE
  601. 12470 LOCATE 15,1:PRINT" The diagram shows how the integrity of    INITIALIZATION and the MAIN LINE        PROGRAM is retained by calls to         subroutines (SR)."
  602. 12472 PRINT:PRINT" SR may be nested, with some SRs           calling others.  I avoid the            temptation to use GOTO from a SR.       I always RETURN."
  603. 12480 Y=24:GOSUB 1310 SPACE
  604. 12490 RETURN
  605. 12500 '
  606. 12501 'approach - 5
  607. 12510 CLS:PRINT"      A STRUCTURED APPROACH          -5"
  608. 12520 PRINT:PRINT:PRINT"  You may think I'm exaggerating the     importance of CONSISTENT RULES."
  609. 12530 PRINT:PRINT"  (My father told me a million times:    "+Q$+"Ira, you should never exaggerate!"+Q$+")"
  610. 12540 PRINT:PRINT"  We all know that "+Q$+"foolish              consistency is the hobgoblin of small   minds,"+Q$+" and that "+Q$+"rules, like pie       crusts, are made to be broken."+Q$
  611. 12560 PRINT:PRINT"  I agree."
  612. 12580 Y=24:GOSUB 1310 SPACE
  613. 12590 RETURN
  614. 12600 '
  615. 12601 'approach - 6
  616. 12610 CLS:PRINT"      A STRUCTURED APPROACH          -6"
  617. 12620 PRINT:PRINT"  I break some rules in each program.    They are my rules and I can break       them, or follow them."
  618. 12632 PRINT:PRINT"  I offer them to you.  Follow them or   break them.  The choice is yours."
  619. 12640 PRINT:PRINT:PRINT:PRINT"        BEST WISHES FROM IRA                    (Archie is a friend of mine)"
  620. 12650 LOCATE 22,1:PRINT"  WANT TO SING A SONG FOR ARCHIE (Y/N)?"
  621. 12660 Y=24:GOSUB 1410 CHOICE
  622. 12670 IF X$ <> "Y" AND X$ <>"y" THEN 12690
  623. 12680 GOSUB 8010
  624. 12690 RETURN
  625. 12700 '
  626. 13000 '
  627. 13001 'how - intro
  628. 13010 D=D*1000
  629. 13020 GOSUB 13110:'intro
  630. 13030 GOSUB 13210
  631. 13040 GOSUB 13310
  632. 13050 GOSUB 13410
  633. 13060 GOSUB 13510
  634. 13070 GOSUB 13610
  635. 13080 D=D/1000
  636. 13090 RETURN
  637. 13100 ,
  638. 13101 'how 1
  639. 13110 COLOR 7,1:CLS:J$=" HOW TO MAKE YOUR LIFE EASIER  "+CHR$(1)+" 1 "+CHR$(2)+" ":X=1:Y=1:GOSUB 4110 BOX
  640. 13120 COLOR 15,1:PRINT" DIVIDE YOUR PROGRAM INTO BLOCKS OF        100 LINE NUMBERS EACH":COLOR 7,1
  641. 13130 J$=" Block #1:   100 -   200 ":Y=7:X=2:GOSUB 4410 BOX
  642. 13132 J$=" Block #2:   200 -   300 ":Y=9:X=4:GOSUB 4410 BOX
  643. 13134 J$=" Block #11:  1100 -  1200 ":Y=12:X=6:GOSUB 4410 BOX
  644. 13136 J$=" Block #12:  1200 -  1300 ":Y=14:X=8:GOSUB 4410 BOX
  645. 13138 J$=" Block #200: 20000 - 20100 ":Y=17:X=10:GOSUB 4410 BOX
  646. 13140 J$=" Block #210: 21000 - 21100 ":Y=19:X=12:GOSUB 4410 BOX
  647. 13180 Y=25:GOSUB 1310 SPACE
  648. 13190 RETURN
  649. 13200 '
  650. 13201 'how 2
  651. 13210 COLOR 7,6:CLS:J$=" HOW TO MAKE YOUR LIFE EASIER  "+CHR$(1)+" 2 "+CHR$(2)+" ":X=1:Y=1:GOSUB 4110 BOX
  652. 13220 COLOR 15,6:PRINT" BLOCKS #1 THRU #199 ARE SET ASIDE         FOR SUBROUTINES":COLOR 7,6
  653. 13222 PRINT" Here's how Block #11 might look."
  654. 13230 PRINT:COLOR 0,7
  655. 13232 PRINT" 1100 '                                  1101 'sample sr          <name>         1110 CODE                <first line>   1115 CODE                               1120 CODE                              ";
  656. 13234 PRINT"  :                                       :                                      1199 RETURN              <one RETURN>   1200 '                                 ";
  657. 13240 Y=25:GOSUB 1310 SPACE:COLOR 7,6
  658. 13242 LOCATE 18,1:PRINT" EXAMPLE:  To call this subroutine from    line #21120 of the MAIN program:                                                    21120 GOSUB 1100:'sample sr          "
  659. 13250 Y=25:GOSUB 1310 SPACE:COLOR 7,6
  660. 13252 LOCATE 18,1:PRINT" Line #10 must be first line of code.    You can use any lines, from #11 thru      #98 for more program code.            Line #99 must be the only RETURN.     "
  661. 13260 Y=25:GOSUB 1310 SPACE:COLOR 7,6
  662. 13262 LOCATE 18,1:PRINT" Use line #01 for a remark with the name   of the subroutine.                    Don't use lines #00 for anything but a    blank remark.                       "
  663. 13270 Y=25:GOSUB 1310 SPACE:COLOR 7,6
  664. 13272 LOCATE 18,1:PRINT" If you follow these rules, you can LIST  the subroutine in Block #11 by typing:                                          LIST 1100-1200                       "
  665. 13280 Y=25:GOSUB 1310 SPACE
  666. 13290 RETURN
  667. 13300 '
  668. 13301 'how 3
  669. 13310 COLOR 7,4:CLS:J$=" HOW TO MAKE YOUR LIFE EASIER  "+CHR$(1)+" 3 "+CHR$(2)+" ":X=1:Y=1:GOSUB 4110 BOX
  670. 13320 COLOR 15,4:PRINT" SUBROUTINES ARE DIVIDED INTO THREE        GROUPS":COLOR 7,0
  671. 13330 J$=" TIME-CRITICAL     ":X=1:Y=7:GOSUB 4210 BOX
  672. 13332 J$=" GENERAL UTILITY   ":X=1:Y=10:GOSUB 4210 BOX
  673. 13334 J$=" ASSOCIATED GROUPS ":X=1:Y=13:GOSUB 4210 BOX
  674. 13340 Y=25:GOSUB 1310 SPACE
  675. 13342 LOCATE 8,21:PRINT" Blocks #1 - #9    ";
  676. 13344 LOCATE 18,1:PRINT" Reserve Blocks #1 thru #9 for time-       critical subroutines (SR).            EXAMPLES IN THIS PROGRAM: Action part     of game, Train with music ...        "
  677. 13350 Y=25:GOSUB 1310 SPACE
  678. 13352 LOCATE 11,21:PRINT" Blocks #10 - #49  ";
  679. 13354 LOCATE 18,1:PRINT" General Utility SRs go into Blocks #10    thru #49.                             EXAMPLES IN THIS PROGRAM: Hit Space       When Ready, Draw Box ...             "
  680. 13360 Y=25:GOSUB 1310 SPACE
  681. 13362 LOCATE 14,21:PRINT" Blocks #50 - #199 ";
  682. 13364 LOCATE 18,1:PRINT" Associated Groups of SR are almost        separate programs.                                                            Use ten blocks for each group.         "
  683. 13370 Y=25:GOSUB 1310 SPACE
  684. 13372 LOCATE 18,1:PRINT" EXAMPLE IN THIS PROGRAM: This part of     the program uses Block #130 - #136.   The SR in Block #130 supervises the       others.  GOSUB 13300 is active now.  "
  685. 13374 Y=25:GOSUB 1310 SPACE
  686. 13376 LOCATE 18,1:PRINT" EXAMPLE (continued): Use of nested SRs    is powerful.  The MAIN PROGRAM calls    a Supervisory SR that calls others.   Always RETURN from where called!       "
  687. 13380 Y=25:GOSUB 1310 SPACE
  688. 13390 RETURN
  689. 13400 '
  690. 13401 'how 4
  691. 13410 COLOR 7,2:CLS:J$=" HOW TO MAKE YOUR LIFE EASIER  "+CHR$(1)+" 4 "+CHR$(2)+" ":X=1:Y=1:GOSUB 4110 BOX
  692. 13420 COLOR 15,2:PRINT" INITIALIZATION AND MAIN LINE PROGRAM      ARE LIKE A TRAIN":COLOR 7,2
  693. 13430 COLOR 0,7:LOCATE 5,1:PRINT"                                         Block #0    1 'by Ira Glickstein                    10 GOTO 20010:'to init     MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM"
  694. 13432 COLOR 0,7:LOCATE 9,1:PRINT" Block       20001 'initialization         #200      20010 CODE                     to       20020 CODE                 ";
  695. 13434 COLOR 0,7:LOCATE 12,1:PRINT"   #209        :                                     20999 'end of init         MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM"
  696. 13436 COLOR 0,7:LOCATE 15,1:PRINT" Block       21001 'main line program      #210      21010 CODE                     to       21020 CODE                 ";
  697. 13438 COLOR 0,7:LOCATE 18,1:PRINT"   #219        :                                     21999 END:'end of program                                          "
  698. 13450 COLOR 7,2:LOCATE 20,1:PRINT" You don't have to use all the Blocks      allocated to MAIN LINE PROGRAM.       One or two should be enough if you use    nested subroutines.                  ";
  699. 13460 Y=25:GOSUB 1310 SPACE
  700. 13462 COLOR 7,2:LOCATE 20,1:PRINT" Note that there is only one END to        this program.                         If it stops you know why.                                                      ";
  701. 13470 Y=25:GOSUB 1310 SPACE
  702. 13482 COLOR 7,2:LOCATE 20,1:PRINT" Use line numbers above #40000 for         remarks.                              (It's handy to put a list of all Block    assignments there.)                  ";
  703. 13484 Y=25:GOSUB 1310 SPACE
  704. 13490 RETURN
  705. 13500 '
  706. 13501 'how 5
  707. 13510 COLOR 7,6:CLS:J$=" HOW TO MAKE YOUR LIFE EASIER  "+CHR$(1)+" 5 "+CHR$(2)+" ":X=1:Y=1:GOSUB 4110 BOX
  708. 13520 COLOR 15,0:PRINT" IN SUMMARY - BE CONSISTENT"
  709. 13530 COLOR 15,1:J$=" Avoid SPAGHETTI Programs           ":X=1:Y=6:GOSUB 4210 BOX
  710. 13532 COLOR 15,2:J$=" Don't Use GOTOs (OK within a Block)":X=1:Y=8:GOSUB 4210 BOX
  711. 13534 COLOR 15,4:J$=" Use GOSUBs to Nested Subroutines   ":X=1:Y=10:GOSUB 4210 BOX
  712. 13536 COLOR 15,1:J$=" Put Time-Critical SR at Low Line # ":X=1:Y=12:GOSUB 4210 BOX
  713. 13538 COLOR 15,2:J$=" Keep Blocks Short to Fit TV Screen ":X=1:Y=14:GOSUB 4210 BOX
  714. 13540 COLOR 15,4:J$=" Use Single-Character Variable Names":X=1:Y=16:GOSUB 4210 BOX
  715. 13542 COLOR 7,0:J$=" If You Don't Follow These Rules -  ":X=1:Y=19:GOSUB 4210 BOX
  716. 13544 J$="- Be Consistent With Your Own Rules":X=4:Y=21:GOSUB 4210 BOX
  717. 13580 Y=25:GOSUB 1310 SPACE
  718. 13590 RETURN
  719. 13600 '
  720. 13601 'how 6
  721. 13610 COLOR 7,0:CLS:J$=" HOW TO MAKE YOUR LIFE EASIER  "+CHR$(1)+" 6 "+CHR$(2)+" ":X=1:Y=1:GOSUB 4110 BOX
  722. 13620 COLOR 15,0:PRINT" YOU CAN COPY THIS ON YOUR PRINTER ":COLOR 7,0
  723. 13630 LOCATE 9,1:PRINT" If have a printer, just hit "+Q$+"PrtSc"+Q$:PRINT"  to Print Screen."
  724. 13640 LOCATE  6,1:PRINT" You might want to copy the previous       frames for reference."
  725. 13650 LOCATE 13,1:PRINT" GOOD LUCK -- AND MAY ARCHIE"+C$(2):PRINT"   BE A FRIEND OF YOURS !!!"
  726. 13670 FOR I=1 TO 100:F=1-(F=1):X=1+32*RND(1):Y=18+4*RND(1):LOCATE Y,X:PRINT C$(F);:SOUND I*37,1:SOUND 37,0:NEXT
  727. 13680 Y=24:GOSUB 1310 SPACE
  728. 13690 RETURN
  729. 13700 '
  730. 20000 '
  731. 20001 'initialization
  732. 20010 SCREEN 0,1,0:WIDTH 80:COLOR 0,0,0:CLS:WIDTH 40:COLOR 0,7,0:KEY OFF:LOCATE 1,1,0
  733. 20020 DEF SEG=0:IF (PEEK(&H410) AND &H30)=&H30 THEN LOCATE 1,1,0,12,13:OUT 948,2:OUT 949,62:'IBM mono display
  734. 20030 DEF SEG=0:IF (PEEK(&H410) AND &H30)<>&H30 THEN LOCATE 1,1,0,6,7:'TV/mon
  735. 20080 GOSUB 5110:'initialize notice
  736. 20090 'init continued next block
  737. 20100 '
  738. 20101 'init continued
  739. 20110 DIM M(88) : FOR I=7 TO 88:M(I)=36.8*(2^(1/12))^(I-6):NEXT:'music
  740. 20120 FOR I=0 TO 6:M(I)=32767:NEXT
  741. 20130 C$(1)=CHR$(32)+CHR$(2)+CHR$(209)+CHR$(203)+CHR$(209)+CHR$(236)+CHR$(190)+CHR$(32):'archie 1
  742. 20140 C$(2)=CHR$(32)+CHR$(2)+CHR$(203)+CHR$(209)+CHR$(203)+CHR$(236)+CHR$(190)+CHR$(32):'archie 2
  743. 20150 C$(3)=" w"+CHR$(1)+"wKMK< ":'mehitabel
  744. 20160 C$(0)="        ":'blank bug
  745. 20170 KEY 1,"mFLIT":KEY 2,"cSWAT":KEY 3,CHR$(21)+"W g"+CHR$(17):KEY 4,"RAID~":KEY 5,"ITCHY":KEY 6,"GOTO 21150"+CHR$(13):KEY 7,"GOSUB 11060"+CHR$(13):KEY 8,"GOSUB 3310"+CHR$(13):KEY 9,"GOSUB 3110"+CHR$(13):KEY 10,"GOSUB 5210"+CHR$(13)
  746. 20172 KEY OFF:DEF SEG:POKE 106,0
  747. 20180 Z$="[fFLIT[2[SWAT[3ML  KW[[4[RAID~[5[BITE[":'for hi, i'm archie
  748. 20200 '
  749. 20201 'init continued
  750. 20210 Q$=CHR$(34):'quote
  751. 20220 D=1000:'delay for general use (normal value 1000)
  752. 21000 '
  753. 21001 'main line program - intro
  754. 21010 Y=2:X=16:GOSUB 1310 SPACE
  755. 21020 IF LEFT$(X$,1)=CHR$(21) THEN K=10:GOTO 21080:'quick menu desired
  756. 21030 Y=2:GOSUB 1010: 'archie marches
  757. 21040 GOSUB 7010:'hi i'm archie
  758. 21050 GOSUB 2610 T MENU:'k is choice
  759. 21080 KEY OFF
  760. 21090 'continued in next block
  761. 21100 '
  762. 21101 'main line program - menu
  763. 21110 Q=0:ON K GOSUB 8010,6010,7010,3110,10010,3210,3310,2610,5910,2710
  764. 21120 'K is choice  K=1~song   2~quiz    3~hi arch  4~game    5~BASIC  6~secret  7~clr/mon  8~t menu  9~quit
  765. 21130 IF Q=9 THEN 21190:'quit
  766. 21140 IF Q=8 THEN 21110:'K selected
  767. 21150 GOSUB 2710 Q MENU:GOTO 21130
  768. 21190 GOTO 29990:'quit
  769. 21200 '
  770. 29990 END
  771. 30001 'data
  772. 30010 DATA 42,1,0,1,42,1,0,1,42,1,0,1,47,1,0,5,51,1,0,3,42,1,0,1,42,1,0,1
  773. 30020 DATA 42,1,0,1,47,1,0,5,51,1,0,5,30,1,0,1,30,1,0,1,35,1,0,3,47,1,0,1
  774. 30030 DATA 47,1,0,1,46,1,0,1,46,1,0,1,44,1,0,1,44,1,0,1,42,8,0,2,42,1,0,1
  775. 30040 DATA 42,1,0,1,42,1,0,1,46,1,0,5,49,1,0,3,42,1,0,1,42,1,0,1,42,1,0,1
  776. 30050 DATA 46,1,0,5,49,1,0,5,37,1,0,1,37,1,0,1,30,1,0,3,54,2,56,2,54,2,52,2
  777. 30060 DATA 51,2,49,2,47,8,-1,-1
  778. 30070 DATA 68,115,121,137,139,141,152,168,197,132,161,243,210,228,274,313,345,373,393,473,555,581,561,647,733,781,828,891,956
  779. 30080 DATA 1016,1062,1129,1199,1188,1257,1328,1401,1476,1553,1632,1747,1875,1969,1968,2076,2170,2260
  780. 30090 DATA 2336,2466,2612,2698,2812,2906,3015,3129,3241,3359,3396,3559,3689,3753,3893,4020,4151,4276,4406,-1
  781. 31001 'block assignments
  782. 31005 '510=archie moves with arrows
  783. 31006 '610=single note la cucaracha
  784. 31007 '710=hi, i'm archie - fix shift
  785. 31008 '810=train
  786. 31010 '1010=play la cucaracha
  787. 31011 '1110=typing sr
  788. 31013 '1310=hit space when ready sr
  789. 31014 '1410=your choice sr
  790. 31015 '1510=sing la cucaracha
  791. 31022 '2210=type-delay
  792. 31026 '2610=typed menu
  793. 31027 '2710=quick menu
  794. 31031 '3110=game - archie & mehitabel
  795. 31032 '3210=secret message
  796. 31033 '3310=color/mono switch
  797. 31041 '4110=box sr single lines
  798. 31042 '4210=box sr double lines
  799. 31043 '4310=box sr shadow top
  800. 31044 '4410=box sr shadow bot
  801. 31045 '4510=box sr char=ASC(c)
  802. 31046 '4610=line sr single line
  803. 31047 '4710=line sr double line
  804. 31051 '5110=initializing/copyright
  805. 31052 '5210=gobbledogook sr
  806. 31059 '5910=exit program
  807. 31060 '6010=quiz - senior sr
  808. 31061 '6110=get users name
  809. 31062 '6210=question 1
  810. 31063 '6310=question 2
  811. 31064 '6410=question 3
  812. 31065 '6510=question 4
  813. 31070 '7010=hi i'm archie - senior sr
  814. 31071 '7110=hi i'm archie - intro
  815. 31072 '7210=hi i'm archie - my name
  816. 31073 '7310=hi i'm archie - loose wire
  817. 31074 '7410=hi i'm archie - about bugs
  818. 31080 '8010-sing along - senior sr
  819. 31081 '8110=sing along - first verse
  820. 31082 '8210=sing along - second verse
  821. 31100 '10010=str BASIC - senior sr
  822. 31110 '11010=problem - senior sr
  823. 31111 '11110=problem - intro
  824. 31112 '11210=problem - more proc
  825. 31113 '11310=problem - still more
  826. 31114 '11410=problem - even more
  827. 31115 '11510=problem - spaghetti
  828. 31116 '11610=problem - dinner time
  829. 31120 '12010=approach - senior sr
  830. 31121 '12110=approach - intro
  831. 31122 '12210=approach - 2
  832. 31123 '12310=approach - 4 (not an
  833. 31124 '12410=approach - 3  error)
  834. 31125 '12510=approach - 5
  835. 31126 '12610=approach - 6
  836. 31130 '13010=how - intro
  837. 31131 '13110=how 1
  838. 31132 '13210=how 2
  839. 31133 '13310=how 3
  840. 31134 '13410=how 4
  841. 31135 '13510=how 5
  842. 31136 '13610=how 6
  843. 31200 '20010=init
  844. 31201 '20110=init
  845. 31202 '20210=init
  846. 31210 '21010=main line program
  847. 31211 '21110=main line program - typed menu
  848. 31299 '29990=END
  849. 31300 '30010=DATA
  850.